/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.tesoreria.rn;

import bs.facturacion.modelo.MovimientoFacturacion;
import bs.global.excepciones.ExcepcionGeneralSistema;
import bs.global.modelo.Formulario;
import bs.global.modelo.Moneda;
import bs.global.rn.FormularioRN;
import bs.global.rn.MonedaRN;
import bs.tesoreria.dao.ComprobanteTesoreriaDAO;
import bs.tesoreria.dao.MovimientoTesoreriaDAO;
import bs.tesoreria.modelo.ComprobanteTesoreria;
import bs.tesoreria.modelo.ConceptoPorComprobanteTesoreria;
import bs.tesoreria.modelo.ItemDebeTesoreria;
import bs.tesoreria.modelo.ItemHaberTesoreria;
import bs.tesoreria.modelo.MovimientoTesoreria;
import java.math.BigDecimal;
import java.util.Date;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

/**
 *
 * @author Claudio
 */
@Stateless
public class MovimientoTesoreriaRN {
    
    @EJB private MovimientoTesoreriaDAO tesoreriaDAO;
    @EJB private MonedaRN monedaRN;
    @EJB private FormularioRN formularioRN;
    @EJB private ComprobanteTesoreriaDAO comprobanteDAO;
 
    @TransactionAttribute(TransactionAttributeType.REQUIRED)   
    public synchronized void guardar(MovimientoTesoreria m) throws Exception {
        
    }
        
    public MovimientoTesoreria generarComprobante(MovimientoFacturacion mf){
        
        MovimientoTesoreria m = new MovimientoTesoreria();   
        return m;        
    }

    public MovimientoTesoreria nuevoMovimiento(String MODCJ, String CODCJ) throws Exception{
        
        ComprobanteTesoreria comprobante = comprobanteDAO.getComprobante(MODCJ,CODCJ);
        if(comprobante==null) throw new ExcepcionGeneralSistema("El comprobante no puede ser nulo");
        
        Formulario formulario = formularioRN.getFormulario(comprobante,"X"); 
        if(formulario==null) throw new ExcepcionGeneralSistema("El formulario no puede ser nulo");
                        
        MovimientoTesoreria m = new MovimientoTesoreria();
        Moneda moneda = monedaRN.getMoneda("USD");
        BigDecimal cotizacion  = monedaRN.getCotizacionDia("USD");
                
        m.setFormulario(formulario);
        m.setFechaMovimiento(new Date());        
        m.setMonedaSecundaria(moneda);
        m.setCotizacion(cotizacion);
        
        m.setTipoMovimiento(comprobante.getTipoMovimiento());
        m.setCuentaTesoreriaDebe(comprobante.getCuentaTesoreriaDebe());
        m.setCuentaTesoreriaHaber(comprobante.getCuentaTesoreriaHaber());
                
        for(ConceptoPorComprobanteTesoreria cc:comprobante.getConceptos()){
            
            if(cc.getDebeHaber().equals("D")){
                
                ItemDebeTesoreria id = new ItemDebeTesoreria();
                id.setNroItem(m.getItemsDebe().size()+1);
                id.setMovimiento(m);
                id.setConcepto(cc.getConcepto());                
                id.setMonedaSecundaria(moneda);
                id.setCotizacion(cotizacion);
                
                id.setCuentaTesoreria(comprobante.getCuentaTesoreriaDebe());
                id.setCuentaTesoreria(cc.getCuentaTesoreriaDebe());
                
                
                m.getItemsDebe().add(id);                
            }
            
            if(cc.getDebeHaber().equals("H")){
                
                ItemHaberTesoreria ih = new ItemHaberTesoreria();
                ih.setNroItem(m.getItemsHaber().size()+1);
                ih.setMovimiento(m);
                ih.setConcepto(cc.getConcepto());                
                ih.setMonedaSecundaria(moneda);
                ih.setCotizacion(cotizacion);
                
                ih.setCuentaTesoreria(comprobante.getCuentaTesoreriaDebe());
                ih.setCuentaTesoreria(cc.getCuentaTesoreriaDebe());
                
                m.getItemsHaber().add(ih);                
            }
        }
        return m;
        
    }
}
